package br.com.agregador.servicoimpl;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import br.com.agregador.entity.Consumidor;
import br.com.agregador.entity.Perfil;
import br.com.agregador.persistencia.dao.ConsumidorDAO;
import br.com.agregador.persistencia.dao.PerfilDAO;
import br.com.agregador.servico.ConsumidorServico;
import br.com.agregador.servico.excecao.EmailException;

@Service("consumidorServico")
public class ConsumidorServicoImpl implements ConsumidorServico {

	private static final long serialVersionUID = 1L;
	private Logger logg = Logger.getLogger(ConsumidorServicoImpl.class);

	@Autowired
	private ConsumidorDAO consumidorDAO;
	
	@Autowired
	private PerfilDAO perfilDAO;
	
	@Transactional
	@Override
	public void salvar(Consumidor consumidor)throws EmailException{		
		Consumidor consumidorIgual = consumidorDAO.recuperarConsumidor(consumidor.getEmail().toLowerCase());
		if(consumidorIgual != null){
			logg.warn("Salvar consumidor :: O e-mail informado já foi cadastrado");
			throw new EmailException("O e-mail informado já foi cadastrado");
		}
		List<Perfil> perfis = perfilDAO.recuperarPerfis();
		for(Perfil p: perfis){
			if(p.getNome().equals("ROLE_CONSUMIDOR")){
				consumidor.getPerfis().add(p);
				break;
			}
		}		
		consumidor.setEmail(consumidor.getEmail().toLowerCase());
		consumidorDAO.salvar(consumidor);
	}

	@Transactional
	@Override
	public void excluir(String emailConsumidor) throws EmailException {
		Consumidor consumidor = consumidorDAO.recuperarConsumidor(emailConsumidor.toLowerCase());
		if(consumidor == null){
			logg.warn("Descadastrar consumidor :: O e-mail informado não existe");
			throw new EmailException("O e-mail informado não existe");
		}		
		consumidorDAO.excluir(consumidor);
	}

	@Override
	public Consumidor recuperarConsumidor(Integer id) {		
		return consumidorDAO.recuperarConsumidor(id);
	}

	@Transactional
	@Override
	public void atualizar(Consumidor consumidor) {
		consumidorDAO.atualizar(consumidor);	
	}

}
